package com.atguigu.userprofile.mapper;

import com.atguigu.userprofile.bean.UserGroup;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PathVariable;

import javax.ws.rs.DELETE;
import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zhangchen
 * @since 2021-05-04
 */


@Mapper
@DS("mysql")
public interface UserGroupMapper extends BaseMapper<UserGroup> {

        //向ck中写入条件分群的结果
        @DS("ck")
        @Insert("insert into user_group select #{id}, ${bitmapAndSql} ")
        void insertUserGroupToCK(@Param("id") String id,@Param("bitmapAndSql") String sql);

        // 添加final的目的是再更新时，先删除ck中的旧数据，但是ck时异步删除，可能在数据真正被删除之前查到脏数据。
        //添加final就可以避免这种情况
        @DS("ck")
        @Select("select  arrayJoin(bitmapToArray(us)) from user_group final where user_group_id = #{id}")
        List<String> queryUserGroupById(@Param("id") String id);

        @DS("ck")
        @Select("select bitmapCardinality(${bitmapAndSql})")
        Long evaluateUserGroupNum(@Param("bitmapAndSql") String sql);

        @DS("ck")
        @Update("alter table user_group delete where user_group_id = #{id}")
        void deleteOldUserGroupById(@Param("id") String id);

}
